Skip to content

Downgrade: raise SciMLBase floor to 3 (LTS precompile method collision with SciMLBase 2.x)#10

Merged
ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-downgrade-floor
Jun 15, 2026
Merged

Downgrade: raise SciMLBase floor to 3 (LTS precompile method collision with SciMLBase 2.x)#10
ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-downgrade-floor

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Problem

The Downgrade workflow (Julia 1.10, the LTS floor) failed. The latest failing run
reported an Unsatisfiable on OrdinaryDiffEq in the 06-10 log, but after the recent
registry changes the resolve itself now succeeds — and the downgrade is currently red for
a deeper reason that the old floors were masking.

The compat declared SciMLBase = "2.152, 3", so the downgrade pins SciMLBase to its
floor in the 2.x range. SciMLBase 2.x still defines
RecursiveArrayTools.tuples(::DEIntegrator) and tuples(::AbstractTimeseriesSolution)
(in its integrator/solution interface). SciMLIterators does import RecursiveArrayTools: tuples
and redefines those exact methods (the utilities were extracted out of SciMLBase into
this package). At SciMLBase 2.x this is a method overwrite, which is fatal during module
precompilation on Julia 1.10
:

WARNING: Method definition tuples(SciMLBase.DEIntegrator...) in module SciMLBase ...
         overwritten in module SciMLIterators ...
ERROR: Method overwriting is not permitted during Module precompilation.

The half-precompiled module then drops later-defined exports, so the test suite fails with
UndefVarError: TimeChoiceIterator not defined.

SciMLBase 3.x removed those tuples(::DEIntegrator / ::AbstractTimeseriesSolution)
definitions, so there is no collision — at latest versions SciMLIterators precompiles and
tests pass (including on Julia 1.10). SciMLIterators' source therefore genuinely requires
SciMLBase 3.

Fix

Raise the floors to the SciMLBase-3-only minimums:

  • SciMLBase = "3" (2.x is incompatible with this package's source)
  • OrdinaryDiffEq = "7" (OrdinaryDiffEq 7 ⟺ SciMLBase 3; OrdinaryDiffEq 6 pairs with SciMLBase 2 and is uninstallable here)
  • RecursiveArrayTools = "4" (OrdinaryDiffEq 7 requires RecursiveArrayTools 4.x; the old "3" floor is unreachable)

No upper bound is touched. Each new floor is a real minimum: the lower versions are
genuinely uninstallable for a SciMLBase-3-only package.

Verification

Ran the actual julia-actions/julia-downgrade-compat (Resolver.jl --min=@deps) on
Julia 1.10 (the LTS downgrade floor):

  • The merged test env resolves to SciMLBase 3.0.0, OrdinaryDiffEq 7.0.0, RecursiveArrayTools 4.0.0.
  • Pkg.test on that downgraded environment passes ("Testing SciMLIterators tests passed").
  • Previously (with the 2.152 floor allowing SciMLBase 2.152.0) the same Pkg.test errored
    with the precompile method overwrite → UndefVarError: TimeChoiceIterator not defined.

Note: SciMLBase still defining these tuples methods in the 2.x series (which SciMLIterators
re-defines) is the underlying source-level collision; raising the floor to SciMLBase 3 sidesteps
it because 3.x no longer defines them.


This PR should be ignored until reviewed by @ChrisRackauckas.

🤖 Generated with Claude Code

ChrisRackauckas and others added 2 commits June 13, 2026 07:20
… breaks LTS precompile)

The Downgrade workflow (Julia 1.10 LTS floor) failed because the
SciMLBase compat floor of "2.152" allowed SciMLBase 2.x. SciMLBase 2.x
still defines RecursiveArrayTools.tuples(::DEIntegrator) and
tuples(::AbstractTimeseriesSolution) in its integrator/solution
interface; SciMLIterators imports RecursiveArrayTools.tuples and
redefines those exact methods (the utilities were extracted out of
SciMLBase into this package). At SciMLBase 2.x this is a method
overwrite, which is fatal during module precompilation on Julia 1.10:

  ERROR: Method overwriting is not permitted during Module precompilation.

The half-precompiled module then loses later-defined exports, so the
tests fail with "UndefVarError: TimeChoiceIterator not defined".

SciMLBase 3.x removed those tuples(::DEIntegrator / ::AbstractTimeseriesSolution)
definitions, so there is no collision. SciMLIterators' source therefore
requires SciMLBase 3. Raising the floor to "3" forces the co-required
OrdinaryDiffEq floor to "7" (OrdinaryDiffEq 7 requires SciMLBase 3) and
RecursiveArrayTools to "4" (OrdinaryDiffEq 7 needs RecursiveArrayTools
4.x); SciMLBase 2.x / OrdinaryDiffEq 6 are genuinely uninstallable for a
SciMLBase-3-only package, so these are real minimums.

Verified on Julia 1.10 (LTS downgrade floor) with the actual
julia-actions/julia-downgrade-compat (Resolver.jl --min=@deps): the
merged test env resolves to SciMLBase 3.0.0, OrdinaryDiffEq 7.0.0,
RecursiveArrayTools 4.0.0, and the full downgrade test suite (Pkg.test)
now passes; previously it errored with the precompile method overwrite
leading to UndefVarError.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review June 15, 2026 05:05
@ChrisRackauckas ChrisRackauckas merged commit a207d80 into SciML:main Jun 15, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants